#include "pkcs.h"

int C_PKCS_PAD::Pad(BYTE* pData, int& iLen)
{
    int iPaddingLen = m_iBlockSize - (iLen % m_iBlockSize); // 计算填充长度

    while(iLen % m_iBlockSize)
    {
        pData[iLen] = iPaddingLen;
        iLen++;
    }

    return 0;
}

int C_PKCS_PAD::UnPad(BYTE* pData, int& iLen)
{
    int iPaddingLen = pData[iLen - 1]; // 获取填充长度

    if(iPaddingLen > m_iBlockSize || iPaddingLen <= 0) return -1; // 无效的填充长度，返回错误码

    for(int i = 0; i < iPaddingLen; ++i)
    {
        if(pData[iLen - 1 - i] != iPaddingLen) return -1; // 非标准填充数据，返回错误码
    }

    iLen -= iPaddingLen;
    return 0;
}
